// pages/index/im/im.js
import TIM from "../../../utils/tim-wx"
const app = getApp();
Page({

  /**
   * 页面的初始数据
   */
  data: {
    tim: null
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    let self = this;
    let opts = {
      SDKAppID: 1400314933 // 接入时需要将0替换为您的云通信应用的 SDKAppIDn/；
    };
    let tim = TIM.create(opts); // SDK 实例通常用 tim 表示
    tim.setLogLevel(4); // 普通级别，日志量较多，接入时建议使用    

    tim.on(TIM.EVENT.MESSAGE_RECEIVED, function (event) {
      // 收到推送的单聊、群聊、群提示、群系统通知的新消息，可通过遍历 event.data 获取消息列表数据并渲染到页面
      // event.name - TIM.EVENT.MESSAGE_RECEIVED
      // event.data - 存储 Message 对象的数组 - [Message]
      event.data.forEach(d => {
        self.getMessage(d)
      });
    });

    this.setData({
      tim: tim
    })
  },

  getMessage: function (message) {
    let self = this;
    if (message.isSystemMessage) {
      return;
    }
    var msg = '接收方:' + message.to + ",发送方:" + message.from + message.nick;
    switch (message.conversationType) {
      case TIM.TYPES.CONV_GROUP:
        msg += ',群组会话';
        break;
      case TIM.TYPES.CONV_C2C:
        msg += ',C2C会话';
        break;
      case TIM.TYPES.CONV_SYSTEM:
        msg += ',系统会话';
        break;
    }
    switch (message.type) {
      case TIM.TYPES.MSG_TEXT:
        msg += ',接收文本消息:' + message.payload.text;
        break;
      case TIM.TYPES.MSG_IMAGE:
        msg += ',接收图片消息:' + message.payload.imageFormat;
        break;
      case TIM.TYPES.MSG_AUDIO:
        msg += ',接收音频消息:' + message.payload.url;
        break;
      case TIM.TYPES.MSG_FILE:
        msg += ',接收文件消息:' + message.payload.fileName;
        break;
      case TIM.TYPES.MSG_GRP_TIP:
        msg += ',群提示消息:' + self.getGroupTipNotice(message.payload);
        break;
      case TIM.TYPES.MSG_GRP_SYS_NOTICE:
        msg += ',群系统通知消息:' + self.getGroupSystemNotice(message.payload);
        break;
    }
    console.log(msg);
  },
  getGroupSystemNotice: function (payload) {
    const groupName =
      payload.groupProfile.groupName || payload.groupProfile.groupID
    switch (payload.operationType) {
      case 1:
        return `${payload.operatorID} 申请加入群组：${groupName}`
      case 2:
        return `成功加入群组：${groupName}`
      case 3:
        return `申请加入群组：${groupName}被拒绝`
      case 4:
        return `被管理员${payload.operatorID}踢出群组：${groupName}`
      case 5:
        return `群：${groupName} 已被${payload.operatorID}解散`
      case 6:
        return `${payload.operatorID}创建群：${groupName}`
      case 7:
        return `${payload.operatorID}邀请你加群：${groupName}`
      case 8:
        return `你退出群组：${groupName}`
      case 9:
        return `你被${payload.operatorID}设置为群：${groupName}的管理员`
      case 10:
        return `你被${payload.operatorID}撤销群：${groupName}的管理员身份`
      case 255:
        return '自定义群系统通知'
    }
  },
  getGroupTipNotice: function (payload) {
    switch (payload.operationType) {
      case TIM.TYPES.GRP_TIP_MBR_JOIN:
        this.getProfile(payload.userIDList);
        return `群成员：${payload.userIDList.join(',')}，加入群组`
      case TIM.TYPES.GRP_TIP_MBR_QUIT:
        return `群成员：${payload.userIDList.join(',')}，退出群组`
      case TIM.TYPES.GRP_TIP_MBR_KICKED_OUT:
        return `群成员：${payload.userIDList.join(',')}，被${payload.operatorID}踢出群组`
      case TIM.TYPES.GRP_TIP_MBR_SET_ADMIN:
        return `群成员：${payload.userIDList.join(',')}，成为管理员`
      case TIM.TYPES.GRP_TIP_MBR_CANCELED_ADMIN:
        return `群成员：${payload.userIDList.join(',')}，被撤销管理员`
      default:
        return '[群提示消息]'
    }
  },
  getProfile: function (userIdList) {
    let self = this;
    // 修改个人标配资料
    let promise = self.data.tim.getUserProfile({
      userIDList: userIdList
    });
    promise.then(function (imResponse) {
      imResponse.data.forEach((el) => {
        console.log(el.nick)
      });
    }).catch(function (imError) {
      console.warn('updateMyProfile error:', imError); // 更新资料失败的相关信息
    });
  },
  /**
   * 登录
   */
  loginTap: function () {
    let self = this;
    let promise = self.data.tim.login({
      userID: 'admin',
      userSig: 'eJwtzFELgjAUhuH-cm4LPXMTndCNdSkVmAS7G23VYSpDxYrovyfq5fd88H7hUpTBaDvIIAoQtvMmY9uB7jSzNg2169Ebp70nAxkTiJwJyfny2Lenzk4ex3GEiIsO1MyWMsmkSOVaocfUPdbirMKb1y45vRwOeXgVOi2Sfj8qks*PzUurqk2tDtUOfn8iUjFA'
    });
    promise.then(function (imResponse) {
      self.updateProfile();
      //console.log("登录成功"); // 登录成功
    }).catch(function (imError) {
      // console.warn('login error:', imError); // 登录失败的相关信息
    });
  },
  updateProfile: function () {
    let self = this;
    // 修改个人标配资料
    let promise = self.data.tim.updateMyProfile({
      nick: '群主大人',
      avatar: 'http(s)://url/to/image.jpg',
      gender: TIM.TYPES.GENDER_MALE,
      selfSignature: '我的个性签名',
      allowType: TIM.TYPES.ALLOW_TYPE_ALLOW_ANY
    });
    promise.then(function (imResponse) {
      console.log(imResponse.data); // 更新资料成功
    }).catch(function (imError) {
      console.warn('updateMyProfile error:', imError); // 更新资料失败的相关信息
    });
  },
  /**
   * 退出
   */
  logoutTap: function () {
    let self = this;
    let promise = self.data.tim.logout();
    promise.then(function (imResponse) {
      // console.log("登出成功"); // 登出成功
    }).catch(function (imError) {
      // console.warn('logout error:', imError);
    });
  },
  /**
   * 创建群组
   */
  createGroupTap: function () {
    let self = this;
    let promise = self.data.tim.createGroup({
      name: "grp",
      type: TIM.TYPES.GRP_AVCHATROOM, //视频聊天室
      groupID: 'grp',
      introduction: '群介绍',
      notification: '群公告'
    });
    promise.then(function (imResponse) { // 创建成功
      // console.log("群组创建成功"); // 创建的群的资料
    }).catch(function (imError) {
      // console.warn('createGroup error:', imError); // 创建群组失败的相关信息
    });
  },
  /**
   * 解散群组
   */
  dismissGroupTap: function () {
    let self = this;
    let promise = self.data.tim.dismissGroup("grp");
    promise.then(function (imResponse) { // 解散成功
      // console.log("被解散的群组" + imResponse.data.groupID); // 被解散的群组 ID
    }).catch(function (imError) {
      // console.warn('dismissGroup error:', imError); // 解散群组失败的相关信息
    });
  },
  /**
   * 键入群组
   */
  joinGroupTap: function () {
    let promise = this.data.tim.joinGroup({
      groupID: 'grp',
      type: TIM.TYPES.GRP_AVCHATROOM
    });
    promise.then(function (imResponse) {
      switch (imResponse.data.status) {
        case TIM.TYPES.JOIN_STATUS_SUCCESS: // 加群成功
          //console.log("加入的群组资料"); // 加入的群组资料
          break;
        case TIM.TYPES.JOIN_STATUS_ALREADY_IN_GROUP: // 已经在群中
          //  console.log("已经在群中")
          break;
        default:
          break;
      }
    }).catch(function (imError) {
      console.warn('joinGroup error:', imError); // 申请加群失败的相关信息
    });
  },
  /**
   * 退出群组
   */
  quitGroupTap: function () {
    let promise = this.data.tim.quitGroup('grp');
    promise.then(function (imResponse) {
      //console.log("退出成功的群" + imResponse.data.groupID); // 退出成功的群 ID
    }).catch(function (imError) {
      // console.warn('quitGroup error:', imError); // 退出群组失败的相关信息
    });
  },
  /**
   * 发送消息
   */
  sentdMessageTap: function () {
    // 发送文本消息，Web 端与小程序端相同
    // 1. 创建消息实例，接口返回的实例可以上屏
    let message = this.data.tim.createTextMessage({
      to: 'grp',
      conversationType: TIM.TYPES.CONV_GROUP,
      payload: {
        text: 'Hello admin!'
      }
    });
    // 2. 发送消息
    let promise = this.data.tim.sendMessage(message);
    promise.then(function (imResponse) {
      // 发送成功
      // console.log("发送成功");
    }).catch(function (imError) {
      // 发送失败
      console.warn('sendMessage error:', imError);
    });
  }
})